home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / gui / uberwidgets / ubutton.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  11KB  |  338 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import wx
  5. from wx import Size
  6. from gui.skin import get as skinget
  7. from gui.uberwidgets.ucontrol import UControl
  8. from time import time
  9.  
  10. class UButton(UControl):
  11.     
  12.     def __init__(self, parent, id = -1, skinkey = 'Button', label = '', bitmap = None, bitmapSize = None, menuMode = False, callback = None, style = wx.BU_LEFT):
  13.         self.bitmap = bitmap
  14.         self.bitmapSize = bitmapSize
  15.         self.Active = False
  16.         self.menuMode = menuMode
  17.         UControl.__init__(self, parent, skinkey, id, label, style = style | wx.NO_BORDER | wx.FULL_REPAINT_ON_RESIZE)
  18.         self.BindHover(self.OnHover)
  19.         self.BindFocus(self.OnFocus)
  20.         Bind = self.Bind
  21.         Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
  22.         Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
  23.         Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
  24.         Bind(wx.EVT_KEY_UP, self.OnKeyUp)
  25.         Bind((wx.EVT_SIZE,), (lambda e: self.Cut(self.BackgroundRegion.GetBitmap(e.Size))))
  26.         self.UpdateSkin()
  27.         if 'wxMSW' in wx.PlatformInfo:
  28.             self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown)
  29.         
  30.         if callback is not None:
  31.             self.Bind(wx.EVT_BUTTON, callback)
  32.         
  33.  
  34.     
  35.     def __repr__(self):
  36.         return '<%s "%s">' % (self.__class__.__name__, self.LabelText)
  37.  
  38.     
  39.     def OnFocus(self, focused):
  40.         if self._native and focused:
  41.             self._nativebutton.SetFocus()
  42.         
  43.         if self.Active and not focused:
  44.             self.Active = False
  45.             self.ChooseBG()
  46.         
  47.         self.Refresh(False)
  48.  
  49.     
  50.     def Enable(self, val):
  51.         UControl.Enable(self, val)
  52.         self.ChooseBG()
  53.         self.Refresh(False)
  54.  
  55.     
  56.     def OnKeyDown(self, e):
  57.         e.Skip()
  58.         if self._native and not (self.Enabled) or not self.IsShown():
  59.             return None
  60.         
  61.         if e.KeyCode == wx.WXK_SPACE:
  62.             self.OnLeftDown()
  63.         
  64.  
  65.     
  66.     def OnKeyUp(self, e):
  67.         e.Skip()
  68.         if self._native and not (self.Enabled) or not self.IsShown():
  69.             return None
  70.         
  71.         c = e.KeyCode
  72.         if c == wx.WXK_SPACE:
  73.             self.OnLeftUp()
  74.         
  75.  
  76.     
  77.     def OnLeftDown(self, e = None):
  78.         if e:
  79.             e.Skip()
  80.         
  81.         if self._native and not (self.Enabled) or not self.IsShown():
  82.             return None
  83.         
  84.         if not self.menuMode:
  85.             if isinstance(e, wx.MouseEvent):
  86.                 self.CaptureMouse()
  87.             
  88.             if self.FindFocus() is not self:
  89.                 self.SetFocus()
  90.             
  91.         else:
  92.             self._fire()
  93.         self.Active = True
  94.         self.ChooseBG()
  95.         self.Refresh(False)
  96.  
  97.     
  98.     def OnLeftUp(self, e = None, fire = True):
  99.         if e:
  100.             e.Skip()
  101.         
  102.         if self._native or not self.IsEnabled():
  103.             return None
  104.         
  105.         while self.HasCapture():
  106.             self.ReleaseMouse()
  107.         if self.Active and fire and not (self.menuMode):
  108.             self._fire()
  109.         
  110.         self.Active = False
  111.         self.ChooseBG()
  112.         self.Refresh(False)
  113.  
  114.     
  115.     def OnHover(self, hover):
  116.         if self.HasCapture():
  117.             self.Active = hover
  118.         
  119.         self.ChooseBG()
  120.         self.Refresh(False)
  121.  
  122.     
  123.     def ChooseBG(self):
  124.         bgs = self.bgs
  125.         if not self.IsEnabled():
  126.             bg = 'disabled'
  127.         else:
  128.             bg = ''
  129.             if self.menuMode:
  130.                 if self.Active or self.Hover:
  131.                     bg = 'hover'
  132.                 
  133.             elif self.Active:
  134.                 bg += 'active'
  135.             
  136.             if self.Hover:
  137.                 bg += 'hover'
  138.             
  139.             if not bg:
  140.                 bg = 'normal'
  141.             
  142.         newbg = getattr(bgs, bg)
  143.         if newbg is not getattr(self, 'BackgroundRegion', None):
  144.             self.BackgroundRegion = newbg
  145.         
  146.         return bg
  147.  
  148.     
  149.     def UpdateSkin(self):
  150.         UControl.UpdateSkin(self)
  151.         if skinget('Button.Native', False):
  152.             self.Native = True
  153.         else:
  154.             self.bgs = skinget('Button.Backgrounds')
  155.             self.ChooseBG()
  156.         font = skinget('Button.Font', None)
  157.         if isinstance(font, wx.Font):
  158.             self.Font = font
  159.         
  160.  
  161.     
  162.     def GetDefaultAttributes(self):
  163.         return wx.Button.GetClassDefaultAttributes()
  164.  
  165.     
  166.     def GetContentSize(self):
  167.         dc = wx.ClientDC(self)
  168.         dc.Font = self.Font
  169.         size = Size(*dc.GetTextExtent(self.LabelText))
  170.         b = self.bitmap
  171.         s = self.WindowStyle
  172.         padding = self.Padding
  173.         if b is not None:
  174.             (imgw, imgh) = None if self.bitmapSize is not None else (b.Width, b.Height)
  175.             if s & wx.BU_LEFT or s & wx.BU_RIGHT:
  176.                 size.IncBy(padding.width + imgw, 0)
  177.                 size = Size(size.width, max(imgh, size.height))
  178.             else:
  179.                 size.IncBy(0, padding.height + imgh)
  180.                 size = Size(max(imgw, size.width), size.height)
  181.         
  182.         size.IncBy(padding.width * 2, padding.height * 2)
  183.         if not s & wx.BU_EXACTFIT:
  184.             size = Size(max(size.width, 65), max(size.height, 17))
  185.         
  186.         return size
  187.  
  188.     
  189.     def _fire(self, e = None):
  190.         if e:
  191.             e.Skip()
  192.         
  193.         evt = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, self.Id)
  194.         evt.SetTimestamp(time())
  195.         evt.SetEventObject(self)
  196.         self.AddPendingEvent(evt)
  197.  
  198.     
  199.     def Draw(self, dc, rect):
  200.         padding = self.Padding
  201.         rect.Deflate(padding.x, padding.y)
  202.         dc.Font = self.Font
  203.         if not self.IsEnabled():
  204.             fg = 'disabled'
  205.         else:
  206.             fg = ''
  207.             if self.Active:
  208.                 fg += 'active'
  209.             
  210.             if self.Hover:
  211.                 fg += 'hover'
  212.             
  213.             if not fg:
  214.                 fg = 'normal'
  215.             
  216.         dc.SetTextForeground(self.skin.fontcolors.get(fg, self.ForegroundColour))
  217.         s = self.WindowStyle
  218.         bitmap = self.Bitmap
  219.         bitmapSize = self.BitmapSize
  220.         bitmapSize = self.BitmapSize
  221.         if self.FindFocus() is self and not (self.menuMode):
  222.             self.DrawFocusRect(dc, rect)
  223.         
  224.         if bitmap is not None:
  225.             bitmap = bitmap.Resized(self.BitmapSize)
  226.             if s & wx.BU_LEFT:
  227.                 dc.DrawBitmap(bitmap, rect.Left, rect.Top + rect.Height / 2 - bitmapSize.height / 2)
  228.                 rect.Subtract(left = bitmapSize.width + padding.width)
  229.             elif s & wx.BU_RIGHT:
  230.                 dc.DrawBitmap(bitmap, rect.Right - bitmapSize.width, rect.Top + rect.Height / 2 - bitmapSize.height / 2)
  231.                 rect.Subtract(right = bitmapSize.width + padding.width)
  232.             
  233.         
  234.         dc.DrawLabel(self.LabelText, rect, indexAccel = self.Label.find('&'), alignment = wx.ALIGN_CENTER)
  235.  
  236.     
  237.     def AcceptsFocus(self):
  238.         if self.IsShown() and self.IsEnabled():
  239.             pass
  240.         return not (self.menuMode)
  241.  
  242.     
  243.     def SetLabel(self, newLabel):
  244.         oldLabel = self.Label
  245.         i = oldLabel.find('&')
  246.         if i != -1 and i < len(oldLabel) - 1 and oldLabel[i + 1] != '&':
  247.             self.KeyCatcher.RemoveDown('alt+%s' % newLabel[i + 1], oldLabel[i + 1])
  248.         
  249.         i = newLabel.find('&')
  250.         if i != -1 and i < len(newLabel) - 1 and newLabel[i + 1] != '&':
  251.             print self, 'adding alt+%s' % newLabel[i + 1]
  252.             self.KeyCatcher.OnDown('alt+%s' % str(newLabel[i + 1]), self._fire)
  253.         
  254.         UControl.SetLabel(self, newLabel)
  255.  
  256.     Label = property(UControl.GetLabel, SetLabel)
  257.     
  258.     def SetBitmap(self, bitmap):
  259.         self.bitmap = bitmap
  260.         self.Refresh(False)
  261.  
  262.     Bitmap = property((lambda self: self.bitmap), SetBitmap)
  263.     
  264.     def SetBitmapSize(self, size):
  265.         self.bitmapSize = size
  266.  
  267.     
  268.     def GetBitmapSize(self):
  269.         if self.bitmapSize is not None:
  270.             return self.bitmapSize
  271.         elif self.bitmap is not None:
  272.             return Size(self.bitmap.Width, self.bitmap.Height)
  273.         else:
  274.             return None
  275.  
  276.     BitmapSize = property(GetBitmapSize, SetBitmapSize)
  277.     
  278.     def SetNative(self, native):
  279.         if native and not (self._native):
  280.             print self.Id
  281.             self._nativebutton = wx.Button(self, self.Id, label = self.Label, size = self.Size, pos = self.Position, style = self.WindowStyle)
  282.             self._nativebutton.SetFocus()
  283.         elif not native and self._native:
  284.             self._nativebutton.Destroy()
  285.         
  286.         if self._native != native:
  287.             self.Parent.Layout()
  288.             self.Parent.Refresh()
  289.         
  290.         self._native = native
  291.  
  292.     Native = property((lambda self: self._native), SetNative)
  293.  
  294. if __name__ == '__main__':
  295.     from tests.testapp import testapp
  296.     from gui import skin
  297.     a = testapp('../../..')
  298.     f = wx.Frame(None, style = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)
  299.     p = wx.Panel(f)
  300.     p.Sizer = s = wx.BoxSizer(wx.VERTICAL)
  301.     bitmap = skin.load_bitmap('error.png')
  302.     b = UButton(p, label = '&Digsby', bitmap = bitmap)
  303.     s.Add(b)
  304.     b.Bind(wx.EVT_BUTTON, (lambda e, but = b: setattr(but, 'Native', not getattr(but, 'Native'))))
  305.     b = UButton(p, label = 'Digsby &Rocks', bitmap = bitmap)
  306.     s.Add(b)
  307.     b = UButton(p, label = '&Exact Fit', style = wx.BU_EXACTFIT)
  308.     s.Add(b)
  309.     b = UButton(p, label = '&Cancel')
  310.     s.Add(b)
  311.     b = UButton(p, label = 'Disab&led')
  312.     s.Add(b)
  313.     b.Enable(False)
  314.     b = UButton(p, label = 'Digs&by', bitmap = bitmap, style = wx.BU_RIGHT, menuMode = True)
  315.     s.Add(b, 0, wx.EXPAND)
  316.     b = UButton(p, label = 'Digsby Rocks', bitmap = bitmap, style = wx.BU_RIGHT)
  317.     s.Add(b, 0, wx.EXPAND)
  318.     b = UButton(p, label = '&OK')
  319.     s.Add(b, 0, wx.EXPAND)
  320.     b = UButton(p, label = 'Cancel')
  321.     s.Add(b, 0, wx.EXPAND)
  322.     s.AddSpacer((30, 30))
  323.     from gui.uberwidgets.UberButton import UberButton
  324.     hs = wx.BoxSizer(wx.HORIZONTAL)
  325.     for x in xrange(4):
  326.         b = UberButton(p, label = 'UberButton')
  327.         hs.Add(b, 1, wx.EXPAND)
  328.     
  329.     s.Add(hs, 0, wx.EXPAND)
  330.     
  331.     def printsrc(e):
  332.         print e.EventObject
  333.  
  334.     p.Bind(wx.EVT_BUTTON, printsrc)
  335.     f.Show()
  336.     a.MainLoop()
  337.  
  338.